#include <cstdio>
#include <vector>
#define N 20

using namespace std;

int showArr(int a[][N])
{
	int i=0,j=0;
	for(i=0;i<N;++i)
	{
	    for(j=0;j<N;++j)
		{
            printf("%-4d ",a[i][j]);
		}
		printf("\n");
	}
	return 0;
}

int showRow(int a[][N],int row,vector<vector<int> > &v)
{
	int i=0,j=0;
	i = row;
//	for(i=0;i<N;++i)
	{
	    vector<int> vtmp;
		for(j=0;j<N;++j)
		{
		   // printf("%-4d ",a[i][j]);
		    vtmp.push_back(a[i][j]);
		}
		//printf("\n");
		v.push_back(vtmp);
	}
	return 0;
}

int showDiagonal1(int a[][N],int x,int y,vector<vector<int> > &v)
{
	int i=0,j=0;
	for(i=0;i<N*2;++i)
	{
	//	int sum = i;
		int sum = x+y;
		int k=0;
		vector<int> vtmp;
		for(j=0;j<=sum;++j)
		{
			k = sum-j;
			if(j<N&&k>=0&&k<N)
            {
               // printf("%-3d ",a[j][k]);
                vtmp.push_back(a[j][k]);
            }
		}
		//printf("\n");
		v.push_back(vtmp);
	}
	return 0;
}

int showDiagonal2(int a[][N],vector<vector<int> > &v)
{
	int i=0,j=0;
	for(i=-(N-1);i<N;++i)
	{
	    vector<int> vtmp;
		int sum = i;
		int k=0;
		for(j=N-1;j>=0;--j)
		{
			k = j+sum;
       		if(j<N&&k>=0&&k<N)
			{
			    //printf("%-3d ",a[j][k]);
			    vtmp.push_back(a[j][k]);
			}
		}
		//printf("\n");
		v.push_back(vtmp);
	}
	return 0;
}

int showList(int a[][N],vector<vector<int> > &v)
{
	int i=0,j=0;
	for(i=0;i<N;++i)
	{
	    vector<int> vtmp;
		for(j=0;j<N;++j)
		{
		    //printf("%-4d ",a[j][i]);
		    vtmp.push_back(a[j][i]);
		}
		//printf("\n");
		v.push_back(vtmp);
	}
	return 0;
}

void showVectorArr(vector<vector<int> > &v)
{
    vector<vector<int> >::iterator p1;
    vector<int>::iterator p2;
    for(p1=v.begin();p1!=v.end();++p1)
    {
        for(p2=p1->begin();p2!=p1->end();++p2)
        {
            printf("%-4d ",*p2);
        }
        printf("\n");
    }
}

int main()
{
	int a[N][N]={};
	int t=0;
	int i=0,j=0;

	for(i=0;i<N;++i)
	{
		for(j=0;j<N;++j)
			a[i][j] = ++t;
	}

	showArr(a);

    vector<vector<int> > v;

	printf("Show row\r\n");
	showRow(a,3,v);
	showVectorArr(v);
	printf("\r\n");


/*
    printf("Show list\r\n");
    showList(a,v);
//    showVectorArr(v);

    showDiagonal1(a,v);
 //   showVectorArr(v);
*/
    showDiagonal2(a,v);
    showVectorArr(v);

	return 0;
}
